class Solution:
    def convert(self, s: str, numRows: int) -> str:
        # s:字符串 numRows：Z字形排列的行数
        # 如果是排一行 或者排的行数 >= 字符串的长度，则直接返回原字符串
        if numRows == 1 or numRows >= len(s):
            return s

        rows = [""] * numRows  # 创建一个列表rows,其大小为numRows,每个元素初始化为空字符串，这个列表用于存储每一行的字符
        current_row = 0  # 当前正在处理的行数
        step = 1  # 初始方向设为向下

        for char in s:
            rows[current_row] += char  # 将当前字符添加到对应的行中
            # 如果到达了最底端 ， 改变方向向上
            if current_row == numRows - 1:
                step = -1

            # 如果到达了最顶行， 改变方向向下
            elif current_row == 0:
                step = 1
            # 更改当前行号
            current_row += step
        return "".join(rows)
so = Solution()
#print(so.convert("PAYPALISHIRING", 3))
print(so.convert("PAYPALISHIRING", 4))
#print(so.convert("ab", 1))
